home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 April / PCWorld_2008-04_cd.bin / komercni software / miton / SystemMechanic7Pro.exe / {app} / smhtml.dll / 1033 / HTML / MENU.JS < prev    next >
Text File  |  2008-01-24  |  9KB  |  328 lines

  1.  
  2.  
  3.  
  4.     
  5.     function MenuOnLoad()
  6.     {
  7.     RenderMenu();
  8.         myMenu = new SDMenu("my_menu");
  9.         myMenu.init();
  10.     }
  11.     
  12.     AddLoadEvent( MenuOnLoad );
  13.     
  14. //    
  15. function CallExternal(menueId)
  16. {
  17.   //SetActivePageButton(menueId);
  18.    try
  19.    {
  20.    external.DoOnPageButtonClicked(menueId);
  21.    }catch(e)
  22.    {
  23.      //alert(menueId);
  24.    }
  25. }
  26.  
  27. function SetActivePageButton(mnueitemid)
  28. {
  29.    var menu = new Menu();
  30.    menu.Select(  mnueitemid);
  31. }
  32.  
  33.  
  34. //Render the whole menu
  35. function RenderMenu()
  36. {
  37.    
  38.    var mi0 = new MenuItem("0");
  39.    mi0.Text = LOC_Nav_Overview;
  40.    mi0.Class = "current";
  41.    var mi1 = new MenuItem("1");
  42.    mi1.Text = LOC_Nav_Problems;
  43.    
  44.    var ms1 = new MenuSub("dashboard");
  45.    ms1.Text = LOC_Nav_Dashboard;
  46.    ms1.Style = "background:url("+LOC_Nav_bg_Dashboard_idle+") no-repeat;";
  47.    ms1.MouseOverEvent = "this.style.background='url('+LOC_Nav_bg_Dashboard_hover+') no-repeat'";
  48.    ms1.MouseOutEvent = "this.style.background='url('+LOC_Nav_bg_Dashboard_idle+') no-repeat'";
  49.    ms1.Add(mi0);
  50.    ms1.Add(mi1);
  51.   
  52.    var mi2 = new MenuItem("2");
  53.    mi2.Text = LOC_Nav_AutomatedTasks; 
  54.    var mi3 = new MenuItem("3");
  55.    mi3.Text = LOC_Nav_InternetSecurity;
  56.    
  57.    var ms2 = new MenuSub("activecare");
  58.    ms2.Text = LOC_Nav_ActiveCare;
  59.    ms2.Class = "collapsed";
  60.    ms2.Style = "background:url("+LOC_Nav_bg_ActiveCare_idle+") no-repeat;";
  61.    ms2.MouseOverEvent = "this.style.background='url('+LOC_Nav_bg_ActiveCare_hover+') no-repeat'";
  62.    ms2.MouseOutEvent = "this.style.background='url('+LOC_Nav_bg_ActiveCare_idle+') no-repeat'";
  63.    ms2.Add(mi2);
  64.    ms2.Add(mi3);
  65.    
  66.    
  67.    var mi4 = new MenuItem("4");
  68.    mi4.Text = LOC_Nav_PowerTools; 
  69.    var mi5 = new MenuItem("5");
  70.    mi5.Text = LOC_Nav_IndividualTools;
  71.    
  72.    var ms3 = new MenuSub("tools");
  73.    ms3.Class = "collapsed";
  74.    ms3.Style = "background:url("+LOC_Nav_bg_Tools_idle+") no-repeat;";
  75.    ms3.Text = LOC_Nav_Tools;
  76.    ms3.MouseOverEvent = "this.style.background='url('+LOC_Nav_bg_Tools_hover+') no-repeat'";
  77.    ms3.MouseOutEvent = "this.style.background='url('+LOC_Nav_bg_Tools_idle+') no-repeat'";
  78.    ms3.Add(mi4);
  79.    ms3.Add(mi5);
  80.    
  81.    var mi6 = new MenuItem("6");
  82.    mi6.Text = LOC_Nav_IntelliStatus; 
  83.    var mi7 = new MenuItem("7");
  84.    mi7.Text = LOC_Nav_History;
  85.    
  86.    var ms4 = new MenuSub("reports");
  87.    ms4.Class = "collapsed";
  88.    ms4.Style = "background:url("+LOC_Nav_bg_Reports_idle+") no-repeat;";
  89.    ms4.Text = LOC_Nav_Reports;
  90.    ms4.MouseOverEvent = "this.style.background='url('+LOC_Nav_bg_Reports_hover+') no-repeat'";
  91.    ms4.MouseOutEvent = "this.style.background='url('+LOC_Nav_bg_Reports_idle+') no-repeat'";
  92.    ms4.Add(mi6);
  93.    ms4.Add(mi7);
  94.  
  95.    var menu = new Menu();
  96.    menu.Add(ms1);
  97.    menu.Add(ms2);
  98.    menu.Add(ms3);
  99.    menu.Add(ms4);
  100.    
  101.    Get("my_menu").innerHTML = menu.Render();
  102. }
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109. //******************** Menu render helper classes **************************************
  110.  
  111. function MenuItem(id)
  112. {
  113.   this.ID = id ||  "";
  114.   this.Text = "MenuItem_" + this.ID;
  115.   this.Class = "";
  116.   this.OnClickEvent = "CallExternal('" + this.ID + "');";
  117.   this.Render = __MenuItemRender;
  118.   
  119.   function __MenuItemRender()
  120.   {
  121.      var html = "\n<a id=\"" + this.ID + "\" class=\"" + this.Class + "\"  href=\"javascript:" + this.OnClickEvent + "\" onfocus=\"this.blur();\">" + this.Text + "</a>\n";
  122.       return html;
  123.   }
  124.  
  125. }
  126.  
  127. function MenuSub(id)
  128. {
  129.   this.ID = id ||  "";
  130.   this.Class = "";
  131.   this.Style = "";
  132.   this.Text = " ";
  133.   this.MouseOverEvent = "";
  134.   this.MouseOutEvent = "";
  135.   this.Render = __MenuSubRender;
  136.   this.Add = __MenuSubAdd;
  137.   this.arrMenuItems = new Array();
  138.   
  139.   function __MenuSubRender()
  140.   {
  141.      
  142.       var html = "\n<div id=\"" + this.ID + "\"  class=\"" + this.Class + "\" ";
  143.       
  144.       if( this.Style != "")
  145.         html += " Style=\"" + this.Style + "\"  ";
  146.       
  147.       if( this.MouseOverEvent != "")
  148.         html += " onmouseover=\"" + this.MouseOverEvent + "\"  ";
  149.       
  150.       if( this.MouseOutEvent != "")
  151.         html += " onmouseout=\"" + this.MouseOutEvent + "\"  ";
  152.         
  153.       html += " > \n";  
  154.       
  155.   
  156.      html += "\n<span>" + this.Text + "</span>\n";
  157.      for(var x=0; x<this.arrMenuItems.length; x++ )
  158.         html += this.arrMenuItems[x].Render();
  159.      html += "\n</div>\n";
  160.      return html;
  161.   }
  162.   
  163.   function __MenuSubAdd(objMenuSub)
  164.   {
  165.     this.arrMenuItems[this.arrMenuItems.length] = objMenuSub;
  166.   }
  167.   
  168. }
  169.  
  170. //array to hold the menus 
  171. var ArrMenu = new Array();
  172.  
  173. function Menu()
  174. {
  175.   this.arrMenuSub = new Array();
  176.   this.Add = __MenuAdd;
  177.   this.Render = __MenuRender;
  178.   this.Select = __MenuSelect;
  179.   
  180.   function __MenuAdd(objMenuItem)
  181.   {
  182.     ArrMenu[ArrMenu.length] = objMenuItem;
  183.   }
  184.   
  185.   function __MenuRender()
  186.   {
  187.    var html = "";
  188.    for(var x=0; x<ArrMenu.length; x++)
  189.    {
  190.       html += ArrMenu[x].Render();
  191.    }
  192.    return html;
  193.   }
  194.   
  195.   function __MenuSelect(id)
  196.   {
  197.   
  198.    for(var x=0; x<ArrMenu.length; x++)
  199.    {
  200.        for(var y=0; y<ArrMenu[x].arrMenuItems.length; y++)
  201.        {
  202.          Get(ArrMenu[x].arrMenuItems[y].ID).className = "";
  203.        }
  204.    }
  205.    var menuItem = Get(id);
  206.    if (menuItem != null)
  207.    {
  208.       menuItem.className = "current";
  209.    }
  210.   }    
  211.   
  212. }
  213.  
  214. //******************** End Menu render helper classes **************************************
  215.  
  216.  
  217. //**********************************  Menu ******************************************
  218.  
  219.  
  220. function SDMenu(id) {
  221.     if (!document.getElementById || !document.getElementsByTagName)
  222.         return false;
  223.     this.menu = document.getElementById(id);
  224.     this.submenus = this.menu.getElementsByTagName("div");
  225.     this.remember = false;
  226.     this.speed = 5;
  227.     this.markCurrent = true;
  228.     this.oneSmOnly = false;
  229. }
  230. SDMenu.prototype.init = function() {
  231.     var mainInstance = this;
  232.     for (var i = 0; i < this.submenus.length; i++)
  233.         this.submenus[i].getElementsByTagName("span")[0].onclick = function() {
  234.             mainInstance.toggleMenu(this.parentNode);
  235.         };
  236.     if (this.markCurrent) {
  237.         var links = this.menu.getElementsByTagName("a");
  238.         for (var i = 0; i < links.length; i++)
  239.             if (links[i].href == document.location.href) {
  240.                 links[i].className = "current";
  241.                 break;
  242.             }
  243.     }
  244.     if (this.remember) {
  245.         var regex = new RegExp("sdmenu_" + encodeURIComponent(this.menu.id) + "=([01]+)");
  246.         var match = regex.exec(document.cookie);
  247.         if (match) {
  248.             var states = match[1].split("");
  249.             for (var i = 0; i < states.length; i++)
  250.                 this.submenus[i].className = (states[i] == 0 ? "collapsed" : "");
  251.         }
  252.     }
  253. };
  254. SDMenu.prototype.toggleMenu = function(submenu) {
  255.     if (submenu.className == "collapsed")
  256.         this.expandMenu(submenu);
  257.     else
  258.         this.collapseMenu(submenu);
  259. };
  260. SDMenu.prototype.expandMenu = function(submenu) {
  261.     var fullHeight = submenu.getElementsByTagName("span")[0].offsetHeight;
  262.     var links = submenu.getElementsByTagName("a");
  263.     for (var i = 0; i < links.length; i++)
  264.         fullHeight += links[i].offsetHeight;
  265.     var moveBy = Math.round(this.speed * links.length);
  266.     
  267.     var mainInstance = this;
  268.     var intId = setInterval(function() {
  269.         var curHeight = submenu.offsetHeight;
  270.         var newHeight = curHeight + moveBy;
  271.         if (newHeight < fullHeight)
  272.             submenu.style.height = newHeight + "px";
  273.         else {
  274.             clearInterval(intId);
  275.             submenu.style.height = "";
  276.             submenu.className = "";
  277.             mainInstance.memorize();
  278.         }
  279.     }, 30);
  280.     this.collapseOthers(submenu);
  281. };
  282. SDMenu.prototype.collapseMenu = function(submenu) {
  283.     var minHeight = submenu.getElementsByTagName("span")[0].offsetHeight;
  284.     var moveBy = Math.round(this.speed * submenu.getElementsByTagName("a").length);
  285.     var mainInstance = this;
  286.     var intId = setInterval(function() {
  287.         var curHeight = submenu.offsetHeight;
  288.         var newHeight = curHeight - moveBy;
  289.         if (newHeight > minHeight)
  290.             submenu.style.height = newHeight + "px";
  291.         else {
  292.             clearInterval(intId);
  293.             submenu.style.height = "";
  294.             submenu.className = "collapsed";
  295.             mainInstance.memorize();
  296.         }
  297.     }, 30);
  298. };
  299. SDMenu.prototype.collapseOthers = function(submenu) {
  300.     if (this.oneSmOnly) {
  301.         for (var i = 0; i < this.submenus.length; i++)
  302.             if (this.submenus[i] != submenu && this.submenus[i].className != "collapsed")
  303.                 this.collapseMenu(this.submenus[i]);
  304.     }
  305. };
  306. SDMenu.prototype.expandAll = function() {
  307.     var oldOneSmOnly = this.oneSmOnly;
  308.     this.oneSmOnly = false;
  309.     for (var i = 0; i < this.submenus.length; i++)
  310.         if (this.submenus[i].className == "collapsed")
  311.             this.expandMenu(this.submenus[i]);
  312.     this.oneSmOnly = oldOneSmOnly;
  313. };
  314. SDMenu.prototype.collapseAll = function() {
  315.     for (var i = 0; i < this.submenus.length; i++)
  316.         if (this.submenus[i].className != "collapsed")
  317.             this.collapseMenu(this.submenus[i]);
  318. };
  319. SDMenu.prototype.memorize = function() {
  320.     if (this.remember) {
  321.         var states = new Array();
  322.         for (var i = 0; i < this.submenus.length; i++)
  323.             states.push(this.submenus[i].className == "collapsed" ? 0 : 1);
  324.         var d = new Date();
  325.         d.setTime(d.getTime() + (30 * 24 * 60 * 60 * 1000));
  326.         document.cookie = "sdmenu_" + encodeURIComponent(this.menu.id) + "=" + states.join("") + "; expires=" + d.toGMTString() + "; path=/";
  327.     }
  328. };